package com.song.rabbitmq.springbootorderrabbitmqproducerdirect.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/*
    direct路由模式 rabbitmq配置
 */
@Configuration
public class DirectRabbitConfig {

    //队列
    @Bean
    public Queue emailQueue() {
        return new Queue("email.direct.queue", true);
    }
    @Bean
    public Queue smsQueue() {
        return new Queue("sms.direct.queue", true);
    }
    @Bean
    public Queue weixinQueue() {
        return new Queue("weixin.direct.queue", true);
    }




    //类型：fanout 发布订阅模式   特点：Fanout—发布与订阅模式，是一种广播机制，它是没有路由key的模式。  像广播
    //类型：direct 路由模式      特点：Direct模式是fanout模式上的一种叠加，增加了路由RoutingKey的模式。  可以指定告诉哪些队列
    //类型：topic  主题模式      特点：Topic模式是direct模式上的一种叠加，增加了模糊路由RoutingKey的模式。  属于同一个组的队列都可以收到,比如  com.email.order，这个queue1可以在多个组
    //类型：headers  参数模式    加了Headers 里面的条件，如果exchange1 是 x = 1, y =2 ，类似于固定条件去绑定队列
    //交换机
    @Bean
    public DirectExchange directOrderExchange() {
        return new DirectExchange("direct_order_exchange", true, false);
    }



    //绑定  将队列和交换机绑定
    @Bean
    public Binding bindingDirect3() {
        return BindingBuilder.bind(emailQueue()).to(directOrderExchange()).with("");
    }
    @Bean
    public Binding bindingDirect2() {
        return BindingBuilder.bind(smsQueue()).to(directOrderExchange()).with("");
    }
    @Bean
    public Binding bindingDirect1() {
        return BindingBuilder.bind(weixinQueue()).to(directOrderExchange()).with("");
    }

}
